Zurück in DatenbankentwicklungWeiter in DatenbankentwicklungNavigation durch einen Recordset ?

Der folgende Code illustriert die Verarbeitung mehrerer Sätze eines Recordset am Beispiel der Öffnungsprozedur des Formulars FrmStart von Access_Quiz.mdb. Aufgabe von FrmStart ist unter anderem die Initialisierung der Basistabelle SCORESMC (Scores der Multiple Choice-Aufgaben). Deren Attribute sollen die folgenden Startwerte enthalten:

Entwurf

Wer eine Basis- oder Ergebnistabelle satzweise verarbeiten will, muss einen Recordset öffnen und ihm den Tabellennamen übergeben. Der folgende Entwurf der Ereignisprozedur Form_Open öffnet einen Recordset der Basistabelle SCORESMC und initialisiert jeden Satz mit den Identifikationsattributen Fragenschlüssel und Alternativenschlüssel. Die Matrikelnummer des Quizteilnehmers wurde bei Testbeginn vom Teilnehmer eingegeben, und der Testschlüssel stammt aus der Tabelle QuizTEST der Aufgabenbank QUIZ_BACKEND.

Bilde aus der leeren Tabelle SCORESMC einen leeren Recordset rstSCORESMC
Bilde aus dem Fragenschlüssel und dem Alternativenschlüssel von  
  QuizMEHRFACHWAHL einen zweiten Recordset rstSCORESMCSchlüssel
Solange rstSCORESMCSchlüssel nicht fertig
  Füge einen Satz mit den folgenden Feldern an rstSCORESMC:
    Fragenschlüssel = Fragenschlüssel von rstSCORESMCSchlüssel
    Alternativenschlüssel = Alternativenschlüssel von rstSCORESMCSchlüssel
    Matrikelnummer = Matrikelnummer des Quizteilnehmers
    Testschlüssel = Testschlüssel
    Benutzerlösung = False                               'später mit Benutzereingabe überschreiben
  Gehe zum nächsten Satz von rstSCORESMCSchlüssel
Schliesse rstSCORESMC und rstSCORESMCSchlüssel

Implementation

Der folgende VBA-Code ist länger als der Entwurfscode, weil er Entscheidungen enthält, die nichts mit der Programmlogik zu tun haben. Zum Beispiel beeinflussen die folgenden Schlüsselwörter die Sicherheit und Effizienz der Recordset-Verarbeitung:  dbOpenForwardOnly erlaubt nur die vorwärtslesende Navigation, während dbOpenDynaset auch das schreibende Durchlaufen ermöglicht.

...
'-- Objektvariablen, welche auf die beiden Recordsets zeigen
Set rstSCORESMC = .OpenRecordset(_
  "SCORESMC", _
  dbOpenDynaset)
Set rstSCORESMCSchlüssel = .OpenRecordset( _
  "SELECT QuizMEHRFACHWAHL.Fragenschlüssel,QuizMEHRFACHWAHL.Alternativenschlüssel " & _
    "FROM QuizMEHRFACHWAHL;", _
  dbOpenForwardOnly)
'-- SCORESMC-Skelett erstellen
'   --------------------------
With rstSCORESMC
  Do While Not rstSCORESMCSchlüssel.EOF
    '- Satzskelett jeweils an das Ende von SCORESMC fügen
    .AddNew
      !Fragenschlüssel = rstSCORESMCSchlüssel!Fragenschlüssel
      !Alternativenschlüssel = rstSCORESMCSchlüssel!Alternativenschlüssel
      !Matrikelnummer = Matrikelnummer_des_Pb  'Pb heisst Proband (Teilnehmer)
      !Testschlüssel = Testschlüssel_des_Pb
      !Benutzerlösung = False                  'später mit Benutzereingabe überschreiben
    .Update                                    'Änderungen endgültig speichern
    rstSCORESMCSchlüssel.MoveNext
  Loop
  rstSCORESMCSchlüssel.Close
  Set rstSCORESMCSchlüssel = Nothing
  .Close                                       'Tabelle SCORESMC speichern
End With
Set rstSCORESMC = Nothing
...

Satzverarbeitung unter DAO
Verarbeitung eines einzigen Satzes unter DAO